<!doctype html>
<html lang="zh-cn">
  <head>
    <title>Property属性 // JW Blog</title>
    <meta charset="utf-8" />
    <meta name="generator" content="Hugo 0.60.1" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="author" content="John Doe" />
    <meta name="description" content="" />
    <link rel="stylesheet" href="https://duyi111.gitee.io/css/main.min.f90f5edd436ec7b74ad05479a05705770306911f721193e7845948fb07fe1335.css" />

    
    <meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Property属性"/>
<meta name="twitter:description" content="1.property属性的介绍  property属性就是负责把一个方法当做属性进行使用，这样做可以简化代码使用。 定义property属性有两种方式  1.装饰器方式 2.类属性方式    2.装饰器方式 class Person(object): def __init__(self): self.__age = 0 # 装饰器方式的property, 把age方法当做属性使用, 表示当获取属性时会执行下面修饰的方法 @property def age(self): return self.__age # 把age方法当做属性使用, 表示当设置属性时会执行下面修饰的方法 @age.setter def age(self, new_age): if new_age &gt;= 150: print(&quot;成精了&quot;) else: self.__age = new_age # 创建person p = Person() print(p.age) p.age = 100 print(p.age) p.age = 1000 # 运行结果： 0 100 成精了  @property表示把方法当做属性使用，表示当获取属性时会执行下面修饰的方法。 @方法名.setter表示把方法当做属性使用，表示当设置属性时会执行下面修饰的方法。 装饰器方式的property属性修改的方法名一定要一样。  3.类属性方式 class Person(object): def __init__(self): self."/>

    <meta property="og:title" content="Property属性" />
<meta property="og:description" content="1.property属性的介绍  property属性就是负责把一个方法当做属性进行使用，这样做可以简化代码使用。 定义property属性有两种方式  1.装饰器方式 2.类属性方式    2.装饰器方式 class Person(object): def __init__(self): self.__age = 0 # 装饰器方式的property, 把age方法当做属性使用, 表示当获取属性时会执行下面修饰的方法 @property def age(self): return self.__age # 把age方法当做属性使用, 表示当设置属性时会执行下面修饰的方法 @age.setter def age(self, new_age): if new_age &gt;= 150: print(&quot;成精了&quot;) else: self.__age = new_age # 创建person p = Person() print(p.age) p.age = 100 print(p.age) p.age = 1000 # 运行结果： 0 100 成精了  @property表示把方法当做属性使用，表示当获取属性时会执行下面修饰的方法。 @方法名.setter表示把方法当做属性使用，表示当设置属性时会执行下面修饰的方法。 装饰器方式的property属性修改的方法名一定要一样。  3.类属性方式 class Person(object): def __init__(self): self." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://duyi111.gitee.io/post/property%E5%B1%9E%E6%80%A7/" />
<meta property="article:published_time" content="2020-02-06T20:38:00+08:00" />
<meta property="article:modified_time" content="2020-02-06T20:38:00+08:00" />


  </head>
  <body>
    <header class="app-header">
      <a href="https://duyi111.gitee.io/"><img class="app-header-avatar" src="/avatar.jpg" alt="John Doe" /></a>
      <h1>JW Blog</h1>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vehicula turpis sit amet elit pretium.</p>
      <div class="app-header-social">
        
      </div>
    </header>
    <main class="app-container">
      
  <article class="post">
    <header class="post-header">
      <h1 class ="post-title">Property属性</h1>
      <div class="post-meta">
        <div>
          <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-calendar">
  <title>calendar</title>
  <rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line>
</svg>
          Feb 6, 2020
        </div>
        <div>
          <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-clock">
  <title>clock</title>
  <circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline>
</svg>
          1 min read
        </div></div>
    </header>
    <div class="post-content">
      <h2 id="1property">1.property属性的介绍</h2>
<ul>
<li><code>property属性</code>就是负责把一个方法当做属性进行使用，这样做可以简化代码使用。</li>
<li>定义property属性有两种方式
<ul>
<li>1.装饰器方式</li>
<li>2.类属性方式</li>
</ul>
</li>
</ul>
<h2 id="2">2.装饰器方式</h2>
<pre><code>class Person(object):

    def __init__(self):
        self.__age = 0

    # 装饰器方式的property, 把age方法当做属性使用, 表示当获取属性时会执行下面修饰的方法
    @property
    def age(self):
        return self.__age

    # 把age方法当做属性使用, 表示当设置属性时会执行下面修饰的方法
    @age.setter
    def age(self, new_age):
        if new_age &gt;= 150:
            print(&quot;成精了&quot;)
        else:
            self.__age = new_age

# 创建person
p = Person()
print(p.age)
p.age = 100
print(p.age)
p.age = 1000



# 运行结果：
0
100
成精了

</code></pre><ul>
<li><code>@property</code>表示把方法当做属性使用，表示当获取属性时会执行下面修饰的方法。</li>
<li><code>@方法名.setter</code>表示把方法当做属性使用，表示当设置属性时会执行下面修饰的方法。</li>
<li>装饰器方式的<code>property属性</code>修改的方法名一定要一样。</li>
</ul>
<h2 id="3">3.类属性方式</h2>
<pre><code>class Person(object):

    def __init__(self):
        self.__age = 0

    def get_age(self):
        &quot;&quot;&quot;当获取age属性的时候会执行该方法&quot;&quot;&quot;
        return self.__age

    def set_age(self, new_age):
        &quot;&quot;&quot;当设置age属性的时候会执行该方法&quot;&quot;&quot;
        if new_age &gt;= 150:
            print(&quot;成精了&quot;)
        else:
            self.__age = new_age

    # 类属性方式的property属性
    age = property(get_age, set_age)

# 创建person
p = Person()
print(p.age)
p.age = 100
print(p.age)
p.age = 1000



# 运行结果：
0
100
成精了

</code></pre><h1 id="4">4.小结</h1>
<ul>
<li>定义<code>property属性</code>有两种方式：
<ul>
<li>1.类属性方式</li>
<li>2.装饰器方式</li>
</ul>
</li>
<li>装饰器方式：
<ul>
<li>1.<code>@property</code> 修饰获取值的方法</li>
<li>2.<code>@方法名.setter</code> 修饰设置值的方法</li>
</ul>
</li>
<li>类属性方式：
<ul>
<li><code>类属性 = property(获取值方法，设置值方法)</code></li>
</ul>
</li>
</ul>

    </div>
    <div class="post-footer">
      
    </div>
  </article>

    </main>
  </body>
</html>
